package com.bbva.recaudos.dao;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.bbva.recaudos.bean.Empresa;
import com.bbva.recaudos.util.Constantes;

public class EmpresaDAOOracle implements EmpresaDAO
{
	SqlSessionFactory sqlMapper = null;
	SqlSessionFactory sqlMapperCali = null;
	SqlSessionFactory sqlMapperProd = null;
	
	{
		try {
			Reader reader  = Resources.getResourceAsReader(Constantes.IBATIS_CONFIG_FILE_NAME);
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			sqlMapper 	  = builder.build(reader,Constantes.NOMBRE_AMBIENTE_TEST);
			reader  = Resources.getResourceAsReader(Constantes.IBATIS_CONFIG_FILE_NAME);
			sqlMapperCali = builder.build(reader,Constantes.NOMBRE_AMBIENTE_CALI);
			reader  = Resources.getResourceAsReader(Constantes.IBATIS_CONFIG_FILE_NAME);
			sqlMapperProd = builder.build(reader,Constantes.NOMBRE_AMBIENTE_PROD);
		} catch (IOException ex)
		{
			ex.printStackTrace();
		} catch (Exception ex)
		{
			ex.printStackTrace();
		}
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Empresa> obtenerTodos() throws Exception {
		SqlSession session = sqlMapper.openSession();
		List<Empresa> lista = null;
		try
		{
			lista = session.selectList("intercnx.SQL_getAllEmpresas");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Empresa> obtenerTodos(int amb) throws Exception {
		SqlSession session = null;
		List<Empresa> lista = null;
		
		if(amb==Constantes.AMBIENTE_TEST)
			session = sqlMapper.openSession();
		else if(amb==Constantes.AMBIENTE_CALI)
			session = sqlMapperCali.openSession();
		else 
			session = sqlMapperProd.openSession();
		
		try
		{
			lista = session.selectList("intercnx.SQL_getAllEmpresas");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
		return lista;
	}
	
	public static void main(String[] args) throws Exception {
		System.out.println("==============INICIO==============");
		EmpresaDAOOracle dao = new EmpresaDAOOracle();
		List<Empresa> lista = null;
		for (int i = 0; i < 3; i++) {
			System.out.println("valor i --> " + i);
			lista = dao.obtenerTodos(i);
			for (Empresa empresa : lista) {
				System.out.println("codigo-->" + empresa.getId() + "\traszoc-->" + empresa.getRazonSocial());
			}
			System.out.println("-----------------------------------------------------------------------------");
		}
		System.out.println("==============FIN==============");
	}
	

}
